using UnityEngine;
using UnityEditor;
using System.Collections;
using ProBuilder2.EditorCommon;
using ProBuilder2.Common;
using System.Linq;

namespace ProBuilder2.Actions
{
    /**
     * Menu interface for resetting the materials associated with special entity types.
     */
    public class pb_ResetEntityMaterials : Editor
    {
        [MenuItem("Tools/" + pb_Constant.PRODUCT_NAME + "/Repair/Repair Entity Materials", false, pb_Constant.MENU_REPAIR)]
        public static void MenuRefreshMeshReferences()
        {
            RepairEntityMaterials();
        }

        /**
         *  \brief Force refreshes all meshes in scene.
         */
        private static void RepairEntityMaterials()
        {
            IEnumerable all = GameObject.FindObjectsOfType(typeof(pb_Entity))
                .Where(x => ((pb_Entity)x).entityType == EntityType.Collider || ((pb_Entity)x).entityType == EntityType.Trigger);

            Material ColliderMat = pb_Constant.ColliderMaterial;
            Material TriggerMat = pb_Constant.TriggerMaterial;

            if (ColliderMat == null)
            {
                Debug.LogError("ProBuilder cannot find Collider material!  Make sure the Collider material asset is in \"Assets/ProCore/ProBuilder/Resources/Material\" folder.");
                return;
            }

            if (TriggerMat == null)
            {
                Debug.LogError("ProBuilder cannot find Trigger material!  Make sure the Trigger material asset is in \"Assets/ProCore/ProBuilder/Resources/Material\" folder.");
                return;
            }

            foreach (pb_Entity ent in all)
            {
                MeshRenderer mr = ent.transform.GetComponent<MeshRenderer>() ?? ent.gameObject.AddComponent<MeshRenderer>();

                mr.sharedMaterials = new Material[1] { ent.entityType == EntityType.Collider ? ColliderMat : TriggerMat };
            }

            EditorUtility.DisplayDialog("Repair Entity Materials", "Successfully reset special entity materials in scene.", "Okay");
        }
    }
}
